使用Node.js自定义数据做chatGPT微调
虽然 GPT 和 ChatGPT 本身已经很强大,但它们的局限性在于训练数据不是最新的,并且可能缺少有关小众主题的信息。我想学习如何使用任意自定义数据轻松训练 GPT 模型,所以我做到了。接下来,我决定将流程记录下来供其他人使用。
在本教程中,您将学习如何从头开始使用您自己的自定义数据微调 GPT。
要查看本教程的最终代码库,请单击
应用程序接口API
OpenAI GPT API 和 SDK 让使用 Python、Node.js 或仅使用 HTTP 请求微调模型变得容易。还有很多社区维护的库community-maintained libraries用于其他语言,如 PHP 和 Ruby。
在本教程中,我们将使用OpenAI Node.js SDK。此 SDK 使用简单,只需几行代码即可对 OpenAI 进行 API 调用。
例如,要检索完成,我们可以调用createCompletion方法:
const response = await openai.createCompletion({
model: 'davinci',
prompt: "What is Lens Protocol",
max_tokens: 200
})
在我们的例子中,我们只是将davinci模型替换为我们自己的模型,该模型将使用我们为训练上传的自定义数据集。
先决条件(Prerequisites)
要学习本教程,您需要在计算机上安装以下软件:
Python
Node.js
您还需要一个 OpenAI API 密钥。您可以在https://openai.com获得一个。
入门(Getting started)
首先,我们将在一个空目录中创建一个新的 Node.js 项目:
mkdir custom-ai-model
cd custom-ai-model
npm init --y
通过添加以下配置行更新新的package.json文件以使用 ES 模块:
"type": "module",
接下来,设置环境变量以保存您的 OpenAI API 密钥。您可以在终端会话或配置文件中设置它,例如.bashrc或.zshrc::
export OPENAI_KEY="your-api-key"
接下来,我们将安装openai npm 包:
npm install openai
最后,我们将安装 OpenAI CLI 和 OpenAI 数据库:
pip install --upgrade openai openai"[datalib]"
现在我们准备开始编写一些代码了!
创建训练数据(Creating the training data)
OpenAI 提供了 一些模型,但是当进行Fine-tuning时,目前只有原始的GPT-3基础模型可以作为起点,例如davinci、curie、babbage和ada。我们将使用davinci模型。
您的数据需要按照以下格式在JSONL文档中创建,每个声明在一个新行中分隔:
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
建议至少提供几百个这样的例子,大多数来源推荐 500 个或更多。
根据我的经验,创建几十个输入至少会给你一些基本的结果,你可以在本教程中测试这些结果,但它不足以用作生产产品。
来自
创建文档后,OpenAI 会提供 一个命令行实用程序,该实用程序将改进数据格式,建议在上传之前运行。
openai tools fine_tunes.prepare_data -f <LOCAL_FILE>
您可以在
一旦您的数据集准备就绪,我们就可以创建一个脚本将其上传到 OpenAI。
创建 API 接口(Creating the API interface)
该文件将定义我们将用于与 OpenAI API 交互的 API。
由于我们将一遍又一遍地重复使用这段代码,我们将把它分离到它自己的文件中,然后将它导入到我们的其他文件中。
创建一个名为api.js的文件并添加以下代码:
/* api.js */
import { Configuration, OpenAIApi } from 'openai'
const openaiApiKey = process.env.OPENAI_KEY
const configuration = new Configuration({
apiKey: openaiApiKey
})
export const openai = new OpenAIApi(configuration)
上传训练数据(Uploading the training data)
现在我们已经创建了 API,我们可以使用它来上传我们的文件以备后用。
创建一个名为uploadFile.js的文件并添加以下代码:
/* uploadFile.js */
import { openai } from './api.js'
import fs from 'fs'
async function upload() {
try {
const response = await openai.createFile(
fs.createReadStream('./data_prepared.jsonl'),
"fine-tune"
);
console.log('File ID: ', response.data.id)
} catch (err) {
console.log('err: ', err)
}
}
upload()
接下来,运行脚本:
node uploadFile.js
上传完成后,记下最后生产的文件 ID,我们将在下一步中用到它。
创建微调(Creating the Fine Tune)
现在我们已经上传了训练数据并有了文件 ID,我们可以使用它来自定义训练我们的模型。
为此,创建一个名为createFineTune.js的新文件并添加以下代码:
/* createFineTune.js */
import { openai } from './api.js'
async function createFineTune() {
try {
const response = await openai.createFineTune({
training_file: 'your-file-id',
model: 'davinci'
})
console.log('response: ', response)
} catch (err) {
console.log('error: ', err.response.data.error)
}
}
createFineTune()
接下来,执行脚本以开始微调您的模型:
node createFineTune.js
列出你的微调(Listing your Fine Tunes)
创建微调后,将需要一些时间来处理。我们可以通过调用 API 方法获取微调的状态以及模型 ID 。
创建一个名为listFineTunes.js的新文件并添加以下代码:
/* listFineTunes.js */
import { openai } from './api.js'
async function listFineTunes() {
try {
const response = await openai.listFineTunes()
console.log('data: ', response.data.data)
} catch (err) {
console.log('error:', err)
}
}
listFineTunes()
运行脚本。
node listFineTunes.js
该过程需要几分钟才能完成。该过程完成并再次运行脚本后,您应该会看到填充了新模型 ID 的字段。
记下这个 fine_tuned_model ID,您将在下一步中用到它。
测试一下(Testing it out)
现在微调已经处理好了,我们的。新模型准备好了,我们可以试试看!
创建一个名为createCompletion.js的新文件。在这里,添加以下代码。请务必使用您的型号名称更新该值:
/* createCompletion.js */
import { openai } from './api.js'
async function createCompletion() {
try {
const response = await openai.createCompletion({
model: 'your-custom-model-name',
prompt: 'What is Lens Protocol',
max_tokens: 200
})
if (response.data) {
console.log('choices: ', response.data.choices)
}
} catch (err) {
console.log('err: ', err)
}
}
createCompletion()
运行脚本:
node createCompletion.js
🎉恭喜🎉 (Congratulations)
您已经使用 GPT3 成功部署了自己的自定义模型!
要查看本教程的最终代码库,请单击
本文翻译自:《Supercharge Your GPT Model: Custom Data Fine-Tuning using Node.js》